// app.js
import config from './config';
import Mock from './mock/index';
import createBus from './utils/eventBus';
import auth from './utils/auth';
const { connectSocket, fetchUnreadNum } = require('./mock/chat');

if (config.isMock) {
  Mock();
}

App({
  onLaunch() {
    // 初始化云开发
    if (!wx.cloud) {
      console.error('请使用 2.2.3 或以上的基础库以使用云能力');
    } else {
      wx.cloud.init({
        env: 'cloud1-6g22e569b6b129d5', // 云开发环境ID
        traceUser: true,
      });
    }

    // 检查用户登录状态
    this.checkUserAuthStatus();

    const updateManager = wx.getUpdateManager();

    updateManager.onCheckForUpdate((res) => {
      // console.log(res.hasUpdate)
    });

    updateManager.onUpdateReady(() => {
      wx.showModal({
        title: '更新提示',
        content: '新版本已经准备好，是否重启应用？',
        success(res) {
          if (res.confirm) {
            updateManager.applyUpdate();
          }
        },
      });
    });

    this.getUnreadNum();
    this.connect();
  },

  onShow() {
    // 应用从后台进入前台时也检查认证状态
    this.checkUserAuthStatus();
    this.refreshUserInfoIfLoggedIn();
  },

  /**
   * 检查用户认证状态
   */
  checkUserAuthStatus() {
    const isLoggedIn = auth.isLoggedIn();
    const userInfo = auth.getCurrentUser();
    const userLevel = auth.getUserLevel();

    console.log('\n🚀 === 应用启动 - 用户认证状态检查 ===');
    
    if (userInfo && userInfo.id) {
      console.log('✅ 用户已登录');
      console.log('👤 用户ID:', userInfo.id);
      console.log('📝 用户名:', userInfo.name || userInfo.username || '未设置');
      console.log('🏷️ 用户角色:', userInfo.role || 'user');
      console.log('⭐ 用户等级:', userLevel.name || '普通用户');
      console.log('📅 登录时间:', userInfo.loginTime || '未知');
      
      // 更新全局用户信息
      this.globalData.userInfo = userInfo;
    } else if (isLoggedIn) {
      console.log('⚠️ 用户已登录，但无法获取用户详细信息');
      const token = auth.getToken();
      if (token) {
        console.log('🔐 Token存在:', token.substring(0, 10) + '...');
      }
    } else {
      console.log('❌ 用户未登录');
      this.globalData.userInfo = null;
    }
    
    console.log('=========================================\n');
  },

  /**
   * 如果已登录，从后端刷新用户信息
   */
  async refreshUserInfoIfLoggedIn() {
    if (auth.isLoggedIn()) {
      try {
        await auth.refreshUserInfo();
        // 检查默认密码
        auth.handleDefaultPassword();
      } catch (error) {
        console.error('刷新用户信息失败:', error);
      }
    }
  },

  globalData: {
    userInfo: null,
    unreadNum: 0, // 未读消息数量
    socket: null, // SocketTask 对象
  },

  /** 全局事件总线 */
  eventBus: createBus(),

  /** 初始化WebSocket */
  connect() {
    const socket = connectSocket();
    socket.onMessage((data) => {
      data = JSON.parse(data);
      if (data.type === 'message' && !data.data.message.read) this.setUnreadNum(this.globalData.unreadNum + 1);
    });
    this.globalData.socket = socket;
  },

  /** 获取未读消息数量 */
  getUnreadNum() {
    fetchUnreadNum().then(({ data }) => {
      this.globalData.unreadNum = data;
      this.eventBus.emit('unread-num-change', data);
    });
  },

  /** 设置未读消息数量 */
  setUnreadNum(unreadNum) {
    this.globalData.unreadNum = unreadNum;
    this.eventBus.emit('unread-num-change', unreadNum);
  },
});
